package com.boot.test.controller;

import com.boot.handle.TestInvocationHandler;
import com.boot.test.impl.TestProxyServiceImpl;
import com.boot.test.service.TestProxyService;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;



public class MainController {

    public static void main(String[] args) {

        //要代理的真实对象
        TestProxyService realObject = new TestProxyServiceImpl();

        //InvocationHandler不是proxy，只是一个帮助proxy的类。proxy会把调用转发给它处理。
        InvocationHandler handler = new TestInvocationHandler(realObject);

        /*
         * 通过Proxy的newProxyInstance方法来创建我们的动态代理对象。
         * 第一个参数 handler.getClass().getClassLoader()，传入被代理对象的类载入器。
         * 第二个参数realSubject.getClass().getInterfaces()，传入代理需要实现的接口
         * 第三个参数handler，传入调用处理器。
         */
        TestProxyService subject = (TestProxyService) Proxy.newProxyInstance(realObject.getClass().getClassLoader(),
                                    realObject.getClass().getInterfaces(), handler);

        System.out.println(realObject.getClass().getName());

        subject.speakLanguage("中国话");

    }
}
